Micron Document




Red (programming language)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Red is a programming language designed to overcome the limitations of the programming language Rebol.cite-ref-gs-3-0[3] Red was introduced in 2011 by Nenad Rakočević,cite-ref-footnotebalbaert2018-4-0[4] and is both an imperative and functional programming language. Its syntax and general usage overlaps that of the interpreted Rebol language.cite-ref-5[5]

The implementation choices of Red intend to create a full stack programming language:cite-ref-footnotebalbaert2018-4-1[4]cite-ref-muo-6-0[6] Red can be used for extremely high-level programming (DSLs and GUIs) as well as low-level programming (operating systems and device drivers). Key to the approach is that the language has two parts: Red/System and Red.cite-ref-developpez-7-0[7]

Red/System is similar to C, but packaged into a Rebol lexical structure – for example, one would write if x > y [print "Hello"] instead of if (x > y) {printf("Hello\n");}.
Red is a homoiconic language, which is capable of meta-programming with Rebol-like semantics.cite-ref-gs-3-1[3]cite-ref-softpedia-8-0[8] Red's runtime library is written in Red/System, and uses a hybrid approach: it compiles what it can deduce statically and uses an embedded interpreter otherwise. The project roadmap includes a just-in-time compiler for cases in between, but this has not yet been implemented.

Red seeks to remain independent of any other toolchain; it does its own code generation.cite-ref-gs-3-2[3] It is therefore possible to cross-compilecite-ref-muo-6-1[6] Red programs from any platform it supports to any other, via a command-line switch. Both Red and Red/System are distributed as open-source software under the modified BSD license. The runtime library is distributed under the more permissive Boost Software License.

As of version 0.6.4 Red includes a garbage collector "the Simple GC".cite-ref-gc-9-0[9]

Contents

Goals

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Introduction

Red was introduced in the Netherlands in February 2011 at the Rebol & Boron conferencecite-ref-10[10] by its author Nenad Rakočević. In September 2011, the Red programming language was presented to a larger audience during the Software Freedom Day 2011.cite-ref-red-sfd-2011-11-0[11]cite-ref-yt-sfd-2011-12-0[12] Rakočević is a long-time Rebol developer known as the creator of the Cheyenne HTTP server.cite-ref-13[13]

Features

Red's syntax and semantics are very close to those of Rebol.cite-ref-footnotebalbaert2018-4-2[4]cite-ref-14[14] Like Rebol, it strongly supports metaprogramming and domain-specific languages (DSLs) and is therefore a highly efficient tool for dialecting (creating embedded DSLs). Red includes a dialect called Red/System, a C-level language which provides system programming facilities.cite-ref-developpez-7-1[7] Red is easy to integrate with other tools and languages as a DLL (libRed) and very lightweight (around 1 MB). It is also able to cross-compile to various platforms (see Cross Compilation section below) and create packages for platforms that require them (e.g., .APK on Android).cite-ref-developpez-7-2[7] Red also includes a fully reactive cross-platform GUI system based on an underlying reactive dataflow engine, a 2D drawing dialect comparable to SVG, compile-time and runtime macro support, and more than 40 standard datatypes.

Goals

The following is the list of Red's Goals as presented on the Software Freedom Day 2011:cite-ref-red-sfd-2011-11-1[11]cite-ref-yt-sfd-2011-12-1[12]

• Simplicity ("An IDE should not be necessary to write code.")
• Compactness ("Being highly expressive maximizes productivity.")
• Speed ("If too slow, it cannot be general-purpose enough.")
• Be "Green", Have a Small Footprint ("Because resources are not limitless.")
• Ubiquity ("Spread everywhere.")
• Portability, Write once run everywhere ("That's the least expected from a programming language.")
• Flexibility ("Not best but good fit for any task!")

Commercial applications

The following commercial applications are currently developed on Red:

• DiaGrammarcite-ref-diagrammar-15-0[15] — Live coded diagramming
• SmartXMLcite-ref-smartxml-16-0[16] — XML parsing tool.

Development

Red's development is planned to be done in two phases:

1. Initial phase: Red and Red/System compilers written in Rebol 2
2. Bootstrap phase: Red and Red/System compilers complemented by a Red JIT-compiler, all written in Red

Cross compilation

Red currently supports the following cross-compilation targets:cite-ref-footnotebalbaert2018-4-3[4]

MS-DOS: Windows, x86, console (and GUI) applications
Windows: Windows, x86, GUI applications
Linux: Linux, x86
• Linux-ARM: Linux, ARMv5, armel (soft-float)
Raspberry Pi: Linux, ARMv5, armhf (hard-float)
Darwin: OS X Intel, console (and GUI) applications
Android: Android, ARMv5
• Android-x86: Android, x86

(Note: Presently, Red applications are 32-bit, but it is planned to switch to 64-bit in the future.cite-ref-footnotebalbaert2018-4-4[4])

Hello World!


Red [Title: "Simple hello world script"]
print "Hello, World!"

Factorial example

IMPORTANT: These are intended as syntax examples. Until Red has 64-bit support, the integer example will overflow a 32-bit integer very quickly. Changing that to `float!` will go farther, but these are merely to show the syntax of the language.

The following is a factorial example in Red:

Red [Title: "A factorial script"] ; Note: The title is optional.
factorial: func [
x [integer!] ; Giving the type of an argument in Red is optional
][
either x = 0 [1][x * factorial x - 1]
]

The following is the same factorial example in Red/System (in this very simple case, the source code is very similar to Red's version):

Red/System [Title: "A factorial script"]
factorial: func [
x [integer!] ; This is compulsory in Red/System
return: [integer!] ; This is compulsory in Red/System
][
either x = 0 [1][x * factorial x - 1]
]

See also
References

cite-note-11. "Creator of Red". GitHub.
cite-note-22. "Red's improvements". red-lang. Retrieved April 1, 2025.
cite-note-gs-33. "Getting Started with GUI Programming using Red Language". Studytonight. Retrieved September 17, 2021.
cite-note-footnotebalbaert2018-44. Balbaert 2018.
cite-note-55. "Interview with Nenad Rakocevic about Red, a Rebol inspired programming language". Not a Monad Tutorial. 28 August 2015. Retrieved August 28, 2015.
cite-note-muo-66. "6 Unusual & Groundbreaking Programming Languages to Learn in 2023". makeuseof.com. 18 October 2023.
cite-note-developpez-77. citereflucas2023Lucas, Mathis (21 July 2023). "Red: an imperative and functional programming language that is also a "full battery" language". Developpez.com. Retrieved 16 January 2023.
cite-note-softpedia-88. citerefsasu2018Sasu, Alexandru (22 November 2018). "Review of Red". Softpedia. Retrieved February 21, 2024.
cite-note-gc-99. citereflucindamichelelucindamichele. "0.6.4 Simple GC and Pure Red GUI Console". Retrieved 2018-12-16. The main feature for 0.6.4 is what we call the Simple GC (Garbage Collector). A more advanced GC is planned for the future
cite-note-1010. « New Red Programming Language Gets Syllable Backend », osnews.com, May 2011.
cite-note-red-sfd-2011-1111. « Red Programming Language: Red at Software Freedom Day 2011 », red-lang.org, September 14, 2011.
cite-note-yt-sfd-2011-1212. "Software Freedom Day 2011: Red programming language, a new REBOL dialect". YouTube. 16 September 2011. Retrieved 17 January 2023.
cite-note-1313. « What is Cheyenne? » Last referenced Nov 2017.
cite-note-1414. "The Dynamic Mapping Architecture". OhioLINK. December 2021.
cite-note-diagrammar-1515. «DiaGrammar», red-lang.org, March 2020.
cite-note-smartxml-1616. «SmartXML», redata.dev.

Further reading

• citerefbalbaert2018Balbaert, Ivo (May 2018). Learn Red - Fundamentals of Red. Packt Publishing. ISBN 978-1789130706.

External links

Wikimedia Commons has media related to

Red (programming language)

.

• Official website
• Latest builds from official website
• Red on GitHub
• Redprogramming.com
• Helpin' Red Archived 2021-09-28 at the Wayback Machine